import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/** Logiciel de patchage de Rom/CD/DVD
  * pour la traduction de jeux video
  *
  * @author     Nemesis (nemesis_tt@yahoo.fr)
  * @version    04/05/04
  */

public class Patcheur {

// Eléments nécessaires à l'application
// ------------------------------------

    /** Patch */
    public Patch patch;
    /** Taille par défaut */
    private static int larg = 640;
    private static int haut = 480;

// Les éléments de la vue (IHM)
// ----------------------------

    /** Fenêtre principale */
    private static JFrame fenetre;
    
    /** Onglets */
    private JTabbedPane onglets = new JTabbedPane();
    private Etapes c_etapes;
    private Infos c_infos;
    private Options c_options;
    private Structure c_structure;
    private Log c_log;
    private Aide c_aide;

// Couleur de fond
    public static Color coul_fond = new Color(200,200,255);
    
// Le constructeur
// ---------------

    /** Construire l'application */
    public Patcheur() {
        
        // Choix du type d'interface
        JFrame.setDefaultLookAndFeelDecorated(true);
        fenetre = new JFrame("Patcheur");
        fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        fenetre.addWindowListener(new ListenerFenetre());
        
        // Dialogue d'ouverture
        JFileChooser ouverture = new JFileChooser("./");
        if (ouverture.showOpenDialog(fenetre.getContentPane())
            != JFileChooser.APPROVE_OPTION)
            System.exit(0);
        else {
            try {
                // Initialisation du patch et chargement
                patch = new Patch(this, ouverture.getSelectedFile());
            } catch (Exception e) {
                System.exit(0);
            }
        }
        
        //  Définition du layout de la fenêtre principale
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints layout = new GridBagConstraints();
        fenetre.getContentPane().setLayout(gridbag);
        layout.fill=GridBagConstraints.BOTH;
        
        fenetre.setBackground(coul_fond);
        c_infos = new Infos(patch.getZip());
        onglets.addTab("Informations",c_infos);
        c_options = new Options();
        onglets.addTab("Options",c_options);
        c_structure = new Structure(patch);
        onglets.addTab("Structure",c_structure);
        c_log = new Log();
        onglets.addTab("Log",c_log);
        c_aide = new Aide();
        onglets.addTab("Aide",c_aide);
        layout.weightx = 5;
        layout.gridx = 0;
        layout.weighty = 1;
        layout.gridy = 0;
        gridbag.setConstraints(onglets, layout);
        fenetre.getContentPane().add(onglets);
        c_etapes = new Etapes(this);
        layout.weightx = 1;
        layout.gridx = 5;
        layout.weighty = 1;
        layout.gridy = 0;
        gridbag.setConstraints(c_etapes, layout);
        fenetre.getContentPane().add(c_etapes);

        // Fenêtre principale centrée
        fenetre.pack();
        Dimension dim_e = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension dim_f = fenetre.getSize();
        dim_f.height = Math.min(haut,dim_f.height);
        dim_f.width = Math.min(larg,dim_f.width);
        dim_f.height = Math.min(dim_e.height,dim_f.height);
        dim_f.width = Math.min(dim_e.width,dim_f.width);
        fenetre.setSize(dim_f);
        fenetre.setLocation((dim_e.width - dim_f.width)/2,(dim_e.height - dim_f.height)/2);
        fenetre.setVisible(true);
        
        // Config du log
        Logueur.setLog(this);
    }
    
// Fermeture
// ---------
    class ListenerFenetre extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            /*int i;
            JTextArea jte;
            
            jte = new JTextArea();
            jte.setEditable(false);
            jte.setOpaque(false);
            jte.setText
            ("Vraiment, vous souhaitez quitter ?");
            i = JOptionPane.showConfirmDialog
            (null, jte, "Réfléchissez...",
            JOptionPane.YES_NO_OPTION, 
            JOptionPane.WARNING_MESSAGE);
            if (i == JOptionPane.OK_OPTION)
            */
           
            //dumpCD.destroy();
            System.exit(0);
        }
    }
    
// Récupération des éléments
// -------------------------
    public Options getOptions() {
        return c_options;
    }
    
    public Patch getPatch() {
        return patch;
    }
    
    public Log getLog() {
        return c_log;
    }
    
    public JTabbedPane getOnglets() {
        return onglets;
    }

// Méthode principale
// ------------------
    
    /** Lancement du patcheur */
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Patcheur();
            }
        });
    }

}
